RAIS  3.2
C:/Projekte/RAIS/Specific Masks/CustomSearchTool.aspx.cs
Go to the documentation of this file.
00001 
00028 using System;
00029 using System.Xml.Linq;
00030 using System.Linq;
00031 using System.Data;
00032 using System.Configuration;
00033 using System.Collections;
00034 using System.Collections.Generic;
00035 using System.Web;
00036 using System.Web.Security;
00037 using System.Web.UI;
00038 using System.Web.UI.WebControls;
00039 using System.Web.UI.WebControls.WebParts;
00040 using System.Web.UI.HtmlControls;
00041 
00042 using RAIS.Common.UserManagement;
00043 using RAIS.Common.DynamicMaskManagement;
00044 using RAIS.UI.Common;
00045 using Constants=RAIS.Common.Constants;
00046 using DynamicMaskManagement=RAIS.ApplicationLogicLayer.DynamicMaskManagement;
00047 using UserManagement=RAIS.ApplicationLogicLayer.UserManagement;
00048 
00049 namespace RAIS.UI.SpecificMasks
00050 {
00054     public partial class CustomSearchTool : System.Web.UI.Page
00055     {
00056                 //*********************************************************************
00057                 #region Properties
00058 
00061                 protected UserData CurrentUser
00062                 {
00063                         get { return (UserData)this.Session[UI.Common.Constants.CURRENT_USER_TAG]; }
00064                 }
00065         private XElement TreeViewItems 
00066         {
00067             get { return Session["TreeViewItems"] as XElement; }
00068             set { Session["TreeViewItems"] = value; }
00069         }
00070         private Dictionary<int, RAIS.Common.SearchDefinition> SearchDefinitionItems
00071         {
00072             get { return Session["SearchDefinitions"] as Dictionary<int, RAIS.Common.SearchDefinition>; }
00073             set { Session["SearchDefinitions"] = value; }
00074         }
00075         /*private Dictionary<int, FunctionRole.Category> MenuItems
00076         {
00077             get{return Session["MenuItems"] as Dictionary<int, FunctionRole.Category>;}
00078             set{Session["MenuItems"] = value;}
00079         }
00080         private Dictionary<int, Mask> MaskItems
00081         {
00082             get { return Session["MaskItems"] as Dictionary<int, Mask>; }
00083             set { Session["MaskItems"] = value; }
00084         }
00085         private Dictionary<int, DynamicMask> DynamicMaskItems
00086         {
00087             get { return Session["DynamicMaskItems"] as Dictionary<int, DynamicMask>; }
00088             set { Session["DynamicMaskItems"] = value; }
00089         }*/
00090         #endregion
00091 
00092         
00093                 #region Event handlers
00094         protected void Page_Init(object sender, EventArgs e)
00095         {
00096             RAIS.UI.Common.PageManagement.SetScrolableListBox(this.LBsearch, this, true);
00097         }
00098         protected void Page_PreLoad(object sender, EventArgs e)
00099         {
00100             RAIS.UI.Common.PageManagement.TrimTextBoxValues(this);
00101         }
00108         protected void Page_Load(object sender, EventArgs e)
00109         {
00110                         this.Response.Cache.SetNoStore();
00111                         if (this.CurrentUser == null)
00112                                 UI.Common.AccessManagement.SignOut(this);
00113                         
00114                         if (!this.IsPostBack)
00115             {
00116                 this.LBLusernameNoTranslation.Text = this.CurrentUser.Name;
00117 
00118                 UI.Common.PageManagement.InitializePageTreeForCategory(this, this.TreeView1, RAIS.Common.Constants.CATEGORY_NAME_ADMINISTRATION);
00119                 this.LBLadmin.ForeColor = RAIS.UI.Common.Constants.COLOR_OF_MENU_BAR_TEXT_HIGHLIGHT;
00120                                 this.LBTNmessagebox.Visible = !(this.CurrentUser.FunctionalRole.Type == FunctionRole.FunctionRoleType.Guest);
00121                 TreeViewItems = LoadTreeView();
00122                 Bind();
00123                 ChangeViewMode();
00124                 LBsearch.SelectedIndex = 0;
00125                 if (LBsearch.Items.Count == 0)
00126                     return;
00127                 SelectSearchDefinitions(SearchDefinitionItems[int.Parse(LBsearch.SelectedValue)]);
00128                 RAIS.UI.Common.PageManagement.SelectTreeNode(TreeView1.Nodes[0].ChildNodes, "_URL_PREFIX~/CustomSearchTool.aspx");
00129                         }
00130 
00131             // bug #728 fix
00132             PageManagement.InitHelpMainMenu(LBTNdefault);
00133         }
00140         protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
00141         {
00142             UI.Common.UserManagement.ProcessTreeViewOnRedirect(this.TreeView1);
00143         }
00144 
00145         protected void DDLresultmenu_SelectedIndexChanged(object sender, EventArgs e)
00146         {
00147             SelectMenu(int.Parse(((DropDownList)sender).SelectedValue));
00148         }
00149 
00150         protected void DDLresultmask_SelectedIndexChanged(object sender, EventArgs e)
00151         {
00152             SelectMask(int.Parse(((DropDownList)sender).SelectedValue));
00153         }
00154 
00155         protected void BTNadd_Click(object sender, EventArgs e)
00156         {
00157             var searchDefinition = new RAIS.Common.SearchDefinition();
00158 
00159             searchDefinition.MaskID = int.Parse(
00160                                                 TreeViewItems.Elements()
00161                                                              .First()
00162                                                              .Elements()
00163                                                              .First().Attribute("ID").Value);
00164             searchDefinition.DynamicMaskID = int.Parse(
00165                                                 TreeViewItems.Elements()
00166                                                              .First()
00167                                                              .Elements()
00168                                                              .First()
00169                                                              .Elements()
00170                                                              .First().Attribute("ID").Value);
00171 
00172             SearchDefinitionItems.Add(0, searchDefinition);
00173             LBsearch.Items.Add(new ListItem(searchDefinition.SearchField, searchDefinition.ID.ToString()));
00174             LBsearch.ClearSelection();
00175             LBsearch.Items.FindByValue("0").Selected = true;
00176             SelectSearchDefinitions(searchDefinition);
00177             ChangeEditMode();
00178         }
00179 
00180         protected void BTNedit_Click(object sender, EventArgs e)
00181         {
00182             ChangeEditMode();
00183         }
00184 
00185         protected void BTNdelete_Click(object sender, EventArgs e)
00186         {
00187             ChangeViewMode();
00188             ApplicationLogicLayer.SearchManagement.DeleteSearchItem(int.Parse(LBsearch.SelectedValue));
00189             BindSearchDefinitions();
00190             LBsearch.SelectedIndex = 0;
00191             SelectSearchDefinitions(SearchDefinitionItems[int.Parse(LBsearch.SelectedValue)]);
00192             RAIS.UI.Common.MessageDisplay.DisplayReturnMessage(this.LBLresult, "The Search Item has been deleted.", true);
00193         }
00194 
00195         protected void BTNdiscard_Click(object sender, EventArgs e)
00196         {
00197             if (SearchDefinitionItems.ContainsKey(0))
00198             {
00199                 SearchDefinitionItems.Remove(0);
00200                 LBsearch.Items.Remove(LBsearch.Items.FindByValue("0"));
00201             }
00202             ChangeViewMode();
00203         }
00204 
00205         protected void BTNsave_Click(object sender, EventArgs e)
00206         {
00207             string actionMessage = "";
00208             bool success = Validate(ref actionMessage);
00209 
00210             if (success)
00211             {
00212 
00213                 string text = TXTsearchitem.Text + '(' + TXTsearchfield.Text + ')';
00214                 if (LBsearch.SelectedValue != "0")
00215                 {
00216                     ApplicationLogicLayer.SearchManagement.DeleteSearchItem(int.Parse(LBsearch.SelectedValue));
00217                     actionMessage = "The new Search Item has been added.";
00218                 }
00219                 else
00220                     actionMessage = "The Search Item has been updated.";
00221                 ApplicationLogicLayer.SearchManagement.AddSearchItem(
00222                                                                 TXTsearchitem.Text,
00223                                                                 TXTsearchfield.Text,
00224                                                                 DDLresultmenu.SelectedItem.Text,
00225                                                                 DDLresultmask.SelectedItem.Text,
00226                                                                 int.Parse(DDLdynamicmaskid.SelectedValue),
00227                                                                 TXTsearchsql.Text);
00228 
00229                 BindSearchDefinitions();
00230                 LBsearch.ClearSelection();
00231                 ListItem listItem = LBsearch.Items.FindByText(text);
00232                 listItem.Selected = true;
00233                 SelectSearchDefinitions(SearchDefinitionItems[int.Parse(listItem.Value)]);
00234                 ChangeViewMode();
00235             }
00236 
00237             RAIS.UI.Common.MessageDisplay.DisplayReturnMessage(this.LBLresult, actionMessage, success);
00238         }
00239 
00240         protected void LBsearch_SelectedIndexChanged(object sender, EventArgs e)
00241         {
00242             SelectSearchDefinitions(SearchDefinitionItems[int.Parse(((ListBox)sender).SelectedValue)]);
00243             ChangeViewMode();
00244         }
00251         protected void LBTNlogout_Click(object sender, EventArgs e)
00252         {
00253             UI.Common.AccessManagement.SignOut(this);
00254         }
00255         #endregion
00256         #region Private helper methods
00257         private List<FunctionRole.Category> GetCategories()
00258         {
00259             List<FunctionRole.Category> ret = new List<FunctionRole.Category>();
00260             foreach (var value in UserManagement.FunctionalRoleCategories)
00261             {
00262                 if (value.Key == Constants.CATEGORY_NAME_INPUT || value.Key == Constants.CATEGORY_NAME_REGULATORY_SYSTEM)
00263                     ret.Add(value.Value);
00264             }
00265             return ret;
00266         }
00267 
00268         private List<RAIS.Common.SearchDefinition> GetSearchDefinitions()
00269         {
00270             List<RAIS.Common.SearchDefinition> ret = ApplicationLogicLayer.SearchManagement.GetSearchDefinitions();
00271             SearchDefinitionItems = ret.ToDictionary(x => x.ID, y => y);
00272             return ret;
00273         }
00274 
00275         private List<Mask> GetMasks(FunctionRole.Category category)
00276         {
00277             List<Mask> ret = new List<Mask>();
00278 
00279             foreach (var value in UserManagement.GetFunctionalRoleSubcategories(category))
00280                 foreach (var mask in UserManagement.GetMasks(category, value.Value))
00281                 {
00282                     if (mask.Value.Name != "All Menu items")
00283                         ret.Add(mask.Value);
00284                 }
00285             ret.Sort((x, y) => x.Name.CompareTo(y.Name));
00286             return ret;
00287         }
00288 
00289         private List<DynamicMask> GetDynamicMasks(Mask mask)
00290         {
00291             List<DynamicMask> ret = new List<DynamicMask>();
00292             foreach (var value in DynamicMaskManagement.GetDynamicMasksByMask(mask))
00293                 ret.Add(value.Value);
00294             return ret;
00295         }
00296 
00297         private void SelectMenu(int selected)
00298         {
00299             DDLresultmask.DataSource = TreeViewItems.Elements("Menu")
00300                                                         .Where(x => x.Attribute("ID").Value == selected.ToString())
00301                                                         .First()
00302                                                         .Elements()
00303                                                         .ToDictionary(x => x.Attribute("ID").Value, y => y.Attribute("Name").Value);
00304             DDLresultmask.DataTextField = "value";
00305             DDLresultmask.DataValueField = "key";
00306             DDLresultmask.DataBind();
00307             SelectMask(int.Parse(DDLresultmask.SelectedValue));
00308         }
00309 
00310         private void SelectMask(int selected)
00311         {
00312             DDLdynamicmaskid.DataSource = TreeViewItems.Elements()
00313                                                         .Elements("Mask")
00314                                                         .Where(x => x.Attribute("ID").Value == selected.ToString())
00315                                                         .First()
00316                                                         .Elements()
00317                                                         .ToDictionary(x => x.Attribute("ID").Value, y => y.Attribute("Name").Value);
00318             DDLdynamicmaskid.DataTextField = "value";
00319             DDLdynamicmaskid.DataValueField = "key";
00320             DDLdynamicmaskid.DataBind();
00321         }
00322 
00323         private void SelectSearchDefinitions(RAIS.Common.SearchDefinition searchDefinition)
00324         {
00325             TXTsearchfield.Text = searchDefinition.SearchField;
00326             TXTsearchitem.Text = searchDefinition.SearchItem;
00327             TXTsearchsql.Text = searchDefinition.SearchSQL;
00328 
00329             int menuID;
00330             if (searchDefinition.ID == 0)
00331                 menuID = int.Parse(TreeViewItems.Elements().First().Attribute("ID").Value);
00332             else
00333                 menuID = int.Parse(TreeViewItems.Elements().Elements("Mask").Where(x => x.Attribute("ID").Value == searchDefinition.MaskID.ToString())
00334                                             .First()
00335                                             .Parent.Attribute("ID").Value);
00336 
00337             SelectMenu(menuID);
00338             DDLresultmenu.ClearSelection();
00339             DDLresultmenu.Items.FindByValue(menuID.ToString()).Selected = true;
00340 
00341             DDLresultmask.ClearSelection();
00342             DDLresultmask.Items.FindByValue(searchDefinition.MaskID.ToString()).Selected = true;
00343             SelectMask(searchDefinition.MaskID);
00344             DDLdynamicmaskid.ClearSelection();
00345             DDLdynamicmaskid.Items.FindByValue(searchDefinition.DynamicMaskID.ToString()).Selected = true;
00346         }
00347 
00348         private void Bind()
00349         {
00350             DDLresultmenu.DataSource = TreeViewItems.Elements("Menu")
00351                                                         .ToDictionary(x => x.Attribute("ID").Value, y => y.Attribute("Name").Value);
00352             DDLresultmenu.DataTextField = "value";
00353             DDLresultmenu.DataValueField = "key";
00354             DDLresultmenu.DataBind();
00355             SelectMenu(int.Parse(DDLresultmenu.SelectedValue));
00356 
00357             BindSearchDefinitions();
00358         }
00359 
00360         private void BindSearchDefinitions()
00361         {
00362             LBsearch.DataSource = GetSearchDefinitions().ToDictionary(x => x.ID, y => y.SearchItem + '(' + y.SearchField + ')');
00363             LBsearch.DataTextField = "value";
00364             LBsearch.DataValueField = "key";
00365             LBsearch.DataBind(); 
00366         }
00367         private void ChangeEditMode()
00368         {
00369             DDLdynamicmaskid.Enabled = true;
00370             DDLresultmask.Enabled = true;
00371             DDLresultmenu.Enabled = true;
00372             TXTsearchfield.Enabled = true;
00373             TXTsearchitem.Enabled = true;
00374             TXTsearchsql.Enabled = true;
00375             BTNadd.Enabled = false;
00376             BTNdelete.Enabled = false;
00377             BTNedit.Enabled = false;
00378             BTNdiscard.Enabled = true;
00379             LBsearch.Enabled = false;
00380             BTNsave.Enabled = true;
00381         }
00382 
00383         private void ChangeViewMode()
00384         {
00385             DDLdynamicmaskid.Enabled = false;
00386             DDLresultmask.Enabled = false;
00387             DDLresultmenu.Enabled = false;
00388             TXTsearchfield.Enabled = false;
00389             TXTsearchitem.Enabled = false;
00390             TXTsearchsql.Enabled = false;
00391             BTNadd.Enabled = true;
00392             BTNdelete.Enabled = true;
00393             BTNedit.Enabled = true;
00394             LBsearch.Enabled = true;
00395             BTNdiscard.Enabled = false;
00396             BTNsave.Enabled = false;
00397         }
00398 
00399         private XElement LoadTreeView()
00400         {
00401             XElement elem = new XElement("TreeView");
00402             elem.Add(GetCategories().Select(menu =>
00403                                         new XElement("Menu",
00404                                             new XAttribute("ID", menu.ID),
00405                                             new XAttribute("Name", menu.Name),
00406                                             GetMasks(menu).Select(mask =>
00407                                                 new XElement("Mask",
00408                                                     new XAttribute("ID", mask.ID),
00409                                                     new XAttribute("Name", mask.Name),
00410                                                     GetDynamicMasks(mask).Select(dynamicMask =>
00411                                                         new XElement("DynamicMask",
00412                                                             new XAttribute("ID", dynamicMask.ID),
00413                                                     new XAttribute("Name", dynamicMask.Name))))))));
00414             return elem;
00415         }
00416 
00417         private bool Validate(ref string returnMessage)
00418         {
00419             if (TXTsearchfield.Text.Trim() == "")
00420             {
00421                 returnMessage = "Search Field is not specified (may not be left blank)";
00422                 return false;
00423             }
00424             if (TXTsearchitem.Text.Trim() == "")
00425             {
00426                 returnMessage = "Search Item is not specified (may not be left blank)";
00427                 return false;
00428             }
00429             if (TXTsearchsql.Text.Trim() == "")
00430             {
00431                 returnMessage = "Search SQL is not specified (may not be left blank)";
00432                 return false;
00433             }
00434             return true;
00435         }
00436         #endregion        
00437     }
00438 }